#pragma once

#define HDEF_NATIVE_CPU_NR	24

/* 启用NUMA_AWARE，优先P2P,P2E,E2P*/
// #define APDS_NUMA_AWARE

#define HDEF_CYCLE_FREQ_PERNS	(3.42)
#define APDS_CPU_NR		(HDEF_NATIVE_CPU_NR)

#define APDS_MAX_THREADS	(256)
#define APDS_MAX_SERVER		(1)
#define APDS_HELP_QUOTA		(13)


#define APDS_NUMA_NR		(1)
// #define APDS_NUMA_NR		(1)
#define APDS_HELP_INCR_P	(2)

__attribute__((aligned(64))) static const unsigned char eff_quota_13700k[APDS_CPU_NR] = {
	APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P,
	APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P,
	APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P,
	APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P, APDS_HELP_QUOTA + APDS_HELP_INCR_P,
	APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1),
	APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1), APDS_HELP_QUOTA - (APDS_HELP_INCR_P << 1)
};
/* / 16*/
#define APDS_GET_NUMANODES(cid) (cid & 0x0)
// #define APDS_GET_NUMANODES(cid) ((cid >> 4))
#define APDS_GET_COREQUOTA(cid) (eff_quota_13700k[cid])
#define APDS_GET_COREEFF(cid)   (eff_quota_13700k[cid])

// #define APDS_GET_NUMAEFF(cid, target_cid)	(numa_eff_incr_quota_13700k[cid][target_cid])
#define APDS_GET_NUMAEFF(cid, target_cid)	(0)

/* E-E开销受时分影响，应当尽量避免 */
static const unsigned char numa_eff_incr_quota_13700k[APDS_CPU_NR][APDS_CPU_NR] = {
	/* core 0 p */
	{ 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 1 p */
	{ 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 2 p */
	{ 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 3 p */
	{ 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 

	/* core 4 p */
	{ 0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 5 p */
	{ 0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 6 p */
	{ 0,0,0,0, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 7 p */
	{ 0,0,0,0, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 

	/* core 8 p */
	{ 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 9 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 10 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0}, 
	/* core 11 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,0,0, 0,0,0,0}, 

	/* core 12 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0}, 
	/* core 13 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,0,0}, 
	/* core 14 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,0,0}, 
	/* core 15 p */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,1}, 

	/* core 16 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1}, 
	/* core 17 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1}, 
	/* core 18 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1}, 
	/* core 19 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1}, 

	/* core 20 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1, 0,0,0,0,}, 
	/* core 21 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1, 0,0,0,0,}, 
	/* core 22 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1, 0,0,0,0,}, 
	/* core 23 e */
	{ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1, 0,0,0,0,}
};
